﻿//using System;
//using System.Drawing;
//using System.Drawing.Imaging;
//using System.IO;
//using System.Net;
//using System.Net.Mail;
//using System.Threading;
//using System.Windows.Forms;
//using System.Drawing.Printing;
//using System.Diagnostics;

//namespace DzInfo.Tools.Web
//{
//    public class ScreenCaptureService2
//    {
//        public void CaptureAndSend(string url, string recipientEmail)
//        {
//            string tempDir = Path.Combine(Path.GetTempPath(), "K3Capture");
//            Directory.CreateDirectory(tempDir);

//            string imagePath = Path.Combine(tempDir, "dashboard.png");
//            string pdfPath = Path.Combine(tempDir, "dashboard.pdf");

//            try
//            {
//                // 截图 - 增加超时时间和重试机制
//                CaptureWebPage(url, imagePath, 180); // 3分钟超时

//                // 转换为PDF
//                ConvertImageToPdf(imagePath, pdfPath);

//                // 发送邮件
//                SendEmail(recipientEmail, imagePath, pdfPath);
//            }
//            catch (Exception ex)
//            {
//                // 记录错误日志
//                LogError($"CaptureAndSend 失败: {ex}");
//                throw;
//            }
//            finally
//            {
//                CleanupFiles(imagePath, pdfPath);
//            }
//        }

//        private void CaptureWebPage(string url, string savePath, int timeoutSeconds = 180)
//        {
//            // 创建STA线程
//            var result = new CaptureResult();
//            var thread = new Thread(() =>
//            {
//                try
//                {
//                    // 创建不可见窗体
//                    using (var form = new Form())
//                    {
//                        form.Size = new Size(1920, 1080);
//                        form.Visible = false;
//                        form.ShowInTaskbar = false;

//                        // 创建浏览器控件
//                        using (var browser = new WebBrowser())
//                        {
//                            browser.Parent = form;
//                            browser.Dock = DockStyle.Fill;
//                            browser.ScrollBarsEnabled = false;
//                            browser.ScriptErrorsSuppressed = true;
//                            browser.AllowNavigation = true;

//                            // 使用混合检测方法确保页面完全加载
//                            var loadCompleted = false;
//                            var stopwatch = Stopwatch.StartNew();

//                            browser.DocumentCompleted += (s, e) =>
//                            {
//                                // 仅当主框架加载完成时标记为完成
//                                if (e.Url.AbsolutePath == browser.Url.AbsolutePath)
//                                {
//                                    loadCompleted = true;
//                                }
//                            };

//                            // 导航到URL
//                            browser.Navigate(url);

//                            // 等待页面加载完成
//                            while (!loadCompleted && stopwatch.Elapsed.TotalSeconds < timeoutSeconds)
//                            {
//                                Application.DoEvents();
//                                Thread.Sleep(100);

//                                // 检查浏览器状态
//                                if (browser.ReadyState == WebBrowserReadyState.Complete)
//                                {
//                                    loadCompleted = true;
//                                }
//                            }

//                            if (!loadCompleted)
//                            {
//                                throw new TimeoutException($"页面加载超时（{timeoutSeconds}秒）");
//                            }

//                            // 额外等待确保大屏数据渲染完成
//                            for (int i = 0; i < 20; i++) // 最多等待20秒
//                            {
//                                Application.DoEvents();
//                                Thread.Sleep(1000);

//                                // 检查是否有AJAX请求仍在进行
//                                if (!IsPageStillLoading(browser))
//                                {
//                                    break;
//                                }
//                            }

//                            // 计算内容高度（考虑大屏滚动内容）
//                            int scrollHeight = browser.Document.Body.ScrollRectangle.Height;
//                            int offsetHeight = browser.Document.Body.OffsetRectangle.Height;
//                            int contentHeight = Math.Max(scrollHeight, offsetHeight);

//                            // 增加额外高度并限制最大值
//                            contentHeight += 100; // 添加额外边距
//                            contentHeight = Math.Min(contentHeight, 10000); // 限制最大高度

//                            browser.Height = contentHeight;
//                            form.Height = contentHeight + 50;

//                            // 截图
//                            using (Bitmap bmp = new Bitmap(browser.Width, browser.Height))
//                            {
//                                browser.DrawToBitmap(bmp, new Rectangle(0, 0, browser.Width, browser.Height));
//                                bmp.Save(savePath, ImageFormat.Png);
//                            }
//                        }
//                    }
//                    result.Success = true;
//                }
//                catch (Exception ex)
//                {
//                    result.ErrorMessage = ex.ToString();
//                }
//            });

//            thread.SetApartmentState(ApartmentState.STA);
//            thread.Start();
//            thread.Join();

//            if (!result.Success)
//                throw new Exception("网页截图失败: " + result.ErrorMessage);
//        }

//        // 检查页面是否仍在加载动态内容
//        private bool IsPageStillLoading(WebBrowser browser)
//        {
//            try
//            {
//                // 检查是否有AJAX请求仍在进行
//                var window = browser.Document.Window;
//                if (window != null)
//                {
//                    dynamic activeX = window.GetType().InvokeMember(
//                        "activeX",
//                        System.Reflection.BindingFlags.GetProperty,
//                        null, window, null);

//                    if (activeX != null && activeX.busy is bool && (bool)activeX.busy)
//                    {
//                        return true;
//                    }
//                }

//                // 检查JavaScript变量
//                var isFetching = browser.Document.InvokeScript("eval", new object[] { "window.isFetchingData || false" });
//                if (isFetching is bool && (bool)isFetching)
//                {
//                    return true;
//                }
//            }
//            catch
//            {
//                // 忽略检查错误
//            }
//            return false;
//        }

//        private void ConvertImageToPdf(string imagePath, string pdfPath)
//        {
//            if (!File.Exists(imagePath))
//                throw new FileNotFoundException("截图文件不存在", imagePath);

//            // 查找可用的PDF打印机
//            string pdfPrinter = FindPdfPrinter();
//            if (pdfPrinter == null)
//                throw new Exception("系统中未找到PDF打印机");

//            // 使用打印功能创建PDF
//            using (var pd = new PrintDocument())
//            {
//                pd.DefaultPageSettings.Landscape = true;
//                pd.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);

//                pd.PrintPage += (sender, e) =>
//                {
//                    try
//                    {
//                        using (Image img = Image.FromFile(imagePath))
//                        {
//                            // 计算缩放比例（考虑DPI）
//                            float dpiRatio = e.Graphics.DpiX / 96f;
//                            float pageWidth = e.PageBounds.Width * dpiRatio;
//                            float pageHeight = e.PageBounds.Height * dpiRatio;

//                            float scaleX = pageWidth / img.Width;
//                            float scaleY = pageHeight / img.Height;
//                            float scale = Math.Min(scaleX, scaleY);

//                            int width = (int)(img.Width * scale);
//                            int height = (int)(img.Height * scale);

//                            // 居中绘制
//                            int x = (e.PageBounds.Width - width) / 2;
//                            int y = (e.PageBounds.Height - height) / 2;

//                            e.Graphics.DrawImage(img, x, y, width, height);
//                        }
//                    }
//                    catch (Exception ex)
//                    {
//                        throw new Exception("PDF生成失败: " + ex.Message);
//                    }
//                    finally
//                    {
//                        e.HasMorePages = false;
//                    }
//                };

//                // 设置PDF打印机
//                pd.PrinterSettings.PrinterName = pdfPrinter;
//                pd.PrinterSettings.PrintToFile = true;
//                pd.PrinterSettings.PrintFileName = pdfPath;

//                // 打印
//                pd.Print();
//            }
//        }

//        // 智能查找PDF打印机
//        private string FindPdfPrinter()
//        {
//            string[] pdfPrinters = {
//                "Microsoft Print to PDF",
//                //"Adobe PDF",
//                //"Foxit Reader PDF Printer",
//                //"PDFCreator",
//                //"CutePDF Writer"
//            };

//            foreach (string printer in PrinterSettings.InstalledPrinters)
//            {
//                foreach (string pdfPrinter in pdfPrinters)
//                {
//                    if (printer.Contains(pdfPrinter))
//                    {
//                        return printer;
//                    }
//                }
//            }

//            return null;
//        }

//        private void SendEmail(string to, params string[] attachments)
//        {
//            try
//            {
//                using (var client = new SmtpClient("smtp.qiye.aliyun.com", 25))
//                {
//                    client.Credentials = new NetworkCredential("it@dna-group.com", "Dna111222");
//                    client.EnableSsl = true;
//                    client.Timeout = 30000; // 30秒超时

//                    using (var message = new MailMessage("it@dna-group.com", to))
//                    {
//                        message.Subject = $"企业大屏快照 {DateTime.Now:yyyy-MM-dd HH:mm}";
//                        message.Body = "附件包含当前大屏截图及PDF文档";
//                        message.IsBodyHtml = false;

//                        foreach (var file in attachments)
//                        {
//                            if (File.Exists(file))
//                            {
//                                message.Attachments.Add(new Attachment(file));
//                            }
//                        }

//                        client.Send(message);
//                    }
//                }
//            }
//            catch (Exception ex)
//            {
//                LogError($"邮件发送失败: {ex}");
//                throw;
//            }
//        }

//        private void CleanupFiles(params string[] files)
//        {
//            foreach (var file in files)
//            {
//                try
//                {
//                    if (File.Exists(file))
//                    {
//                        File.Delete(file);
//                    }
//                }
//                catch (Exception ex)
//                {
//                    LogError($"文件清理失败: {file} - {ex.Message}");
//                }
//            }
//        }

//        // 错误日志记录
//        private void LogError(string message)
//        {
//            try
//            {
//                string logPath = Path.Combine(Path.GetTempPath(), "K3Capture_errors.log");
//                File.AppendAllText(logPath, $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] {message}\n");
//            }
//            catch
//            {
//                // 忽略日志错误
//            }
//        }

//        private class CaptureResult
//        {
//            public bool Success { get; set; }
//            public string ErrorMessage { get; set; }
//        }
//    }
//}